﻿/**
 * Scene_Intro
 * 
 * @version 2012.01.15
 * @author  Bruno Miguel de Oliveira Tamer <bmotamer@gmail.com>
 */

#region XNA Libraries

using Microsoft.Xna.Framework.Input;

#endregion

#region SDK Libraries

using main.sdk.audio;
using main.sdk.display;
using main.sdk.display.object2d;
using main.sdk.input;
using main.sdk.scene;
using System.Collections.Generic;
using main.sdk.utils.animations2D;
using Microsoft.Xna.Framework;

#endregion

namespace main.src.scene
{

    public sealed class Scene_Intro : Scene_Base
    {

        #region Instance Variables

        private Sprite[] Sprites       = { new Sprite("RSC/Picture/Seven Game"), new Sprite("RSC/Picture/Amadeus") };
        private SerialAnimator2D SerialAnimator = new SerialAnimator2D();

        #endregion

        #region Instance Methods

        public override void Start()
        {
            /* Toca o som */
            Audio.PlayBGM("RSC/Audio/Title",25);

            /* Cria os animadores para cada sprite criado */
            for (uint i = 0; i < Sprites.Length; i++)
            {
                /* Cria um animador */
                Animator2D animator = new Animator2D(Sprites[i]);
                
                /* Cria uma animação em sequência só para o alpha. Total 4s */
                SerialAnimation2D Alpha = new SerialAnimation2D();
                Alpha.Add(new AlphaAnimation2D(0, 255, 1, 3)); // Aparece em 1s
                Alpha.Add(new WaitAnimation2D(2));             // Espera 2s
                Alpha.Add(new AlphaAnimation2D(0, 1, 2));      // Zera o alpha em 1s 

                /* Movimentação em X */
                SerialAnimation2D XMovement = new SerialAnimation2D();
                XMovement.Add(MoveAnimation2D.CreateX((Program.Width - Sprites[i].Width) / 2 - 20, (Program.Width - Sprites[i].Width) / 2 + 20, 4, 1));

                /* Movimentação em Y */
                SerialAnimation2D YMovement = new SerialAnimation2D();
                YMovement.Add(MoveAnimation2D.CreateY((Program.Height - Sprites[i].Height) / 2, (Program.Height - Sprites[i].Height) / 2 + 4, 2, 2)); // Dá uma descidinha. (Ui, diliça)
                YMovement.Add(MoveAnimation2D.CreateY((Program.Height - Sprites[i].Height) / 2 + 4, (Program.Height - Sprites[i].Height) / 2, 2, 3)); // Dá uma subidinha. (Ui ui ui, diliça)

                /* Cria uma animação paralela para o movimento e o alpha */
                ParallelAnimation2D Parallel = new ParallelAnimation2D();
                Parallel.Add(Alpha);
                Parallel.Add(XMovement);
                Parallel.Add(YMovement);

                /* Adiciona as animações */
                animator.Add(new VisibleAnimation2D(true));  // Liga visibilidade
                animator.Add(Parallel);                      // Adiciona a animação
                animator.Add(new VisibleAnimation2D(false)); // Desliga visibilidade

                /* Adiciona aos animadores */
                SerialAnimator.Add(animator);

                /* Parametros iniciaias */
                Sprites[i].Alpha = 0;
                Sprites[i].Visible = false;
            }
        }

        public override void Update()
        {
            /* Atualiza o animador atual */
            SerialAnimator.Update(Program.Time.ElapsedGameTime.TotalSeconds);

            /* Muda para o scene title */
            if (!SerialAnimator.Active())
                Scene.Set(new Scene_Title());
        }

        public override void Terminate()
        {
            foreach (Sprite sprite in Sprites)
                sprite.Dispose();
        }

        #endregion

    }

}